from random import random
import allure
import pytest
from api_keyword.api_key import ApiKey
from params.allParams import *


# 逻辑层

# 防止中文乱码，加入了pytest_collection_modifyitems（函数）
def pytest_collection_modifyitems(items):
    """测试用例收集完成时，将收集到的item的name和nodeid的中文显示在控制台上"""
    for item in items:
        # 将item的name属性编码为UTF-8，然后解码为unicode_escape，以处理可能存在的特殊字符
        item.name = item.name.encode("utf-8").decode("unicode_escape")  # 处理name属性中的特殊字符
        # 将item的nodeid属性编码为UTF-8，然后解码为unicode_escape，以处理可能存在的特殊字符
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")  # 处理nodeid属性中的特殊字符


@pytest.fixture(scope='session')
def token_fix():
    apiKey = ApiKey()  # 初始化工具类
    with allure.step("发送登录接口请求，并获取token，整个项目只生成一次"):
        # 请求接口
        url = f"{URL}/api/user/login"
        # 从测试数据中获取用户名和密码
        userInfo = {
            'username': 'admin',
            'password': '8i4De25KlVQVwqTDgTNGqw=='
        }
        # 发送登录请求-使用api_key类中封装的请求方法
        res = apiKey.post(url=url, json=userInfo)
        # 获取token、uid
        token = apiKey.get_text(res.text, 'token')
        uid = str(apiKey.get_text(res.text, 'pk_id'))
        # 验证代码，验证token只生成一次
        token_random = random()
        return apiKey, token, res, token_random, uid
